<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    //call()
    function fn() {
        console.log('函数被调用');
        console.log(this);
    }
    var obj = {
        name: 'obj'
    }

    //可以调用函数
    //call()没有参数时this指向window；
    //有一个参数时，指向该参数；
    //有多个参数时，this指向第一个参数，剩余参数作为函数的实参传入函数

    fn.call()//'函数被调用'  window
    fn.call(obj)//this-->obj
</script>
<script>
    //apply()
    function fn(x, y, z) {
        console.log('函数被调用');
        console.log(this);
        console.log(x, y, z);
    }
    var obj = {
        name: 'obj'
    }
    //可以调用函数
    //apply()没有参数时this指向window；
    //有一个参数时，指向该参数；
    //有多个参数时，this指向第一个参数，函数的实参以数组类型传入函数
    fn.apply(obj, [1, 2, 3])
</script>
<script>
    //bind()
    //不可以调用函数
    var obj = {
        name: 'obj',
        fn: function (x, y, z) {//:function不能缩写
            console.log('函数被调用');
            console.log(this);
            console.log(x, y, z);
        }.bind([1,1,1])
    }
    //bind()没有参数时this指向window；
    //有一个参数时，指向该参数；
    //实参照常在调用时传入
    obj.fn(1,2,3)
</script>

</html>